const HisToday = require('./ORM');
const crawlerRequest = require('@/utils/crawlerRequest');

// 爬虫数据
function spiderData(req, res) {
  let { date } = req.query;
  let url = `https://www.chazidian.com/d/${date}/`;
  // 爬虫请求
  crawlerRequest({ url })
    .then($ => {
      let link = [];
      $('.histday_cont')
        .eq(0)
        .find('ul li')
        .each(function () {
          let year = $(this).find('a').first().text();
          let title = $(this).find('a').last().text();
          let href = $(this).find('a').last().attr('href');
          let tmp = {
            year,
            title,
            date,
            content_id: href.replace('https://www.chazidian.com/d/', '').match(/\/(\S*)\//)[1]
          };
          link.push(tmp);
        });
      // 返回爬取结果
      res.api_success(link);
      // 数据写入数据库
      createDB(link)
        .then(() => {
          // res 参数为写入的数据
          console.log('数据库写入成功');
        })
        .catch(err => {
          console.log('数据库写入失败', err);
        });
    })
    .catch(err => {
      console.log(err);
      res.api_error('请求异常', 5001);
    });
}

// 批量写入数据库
async function createDB(data) {
  return await HisToday.bulkCreate(data);
}

module.exports = async (req, res) => {
  // 如果表不存在,则创建该表(如果已经存在,则不执行任何操作)
  await HisToday.sync();
  // 查找数据库
  const project = await HisToday.findAll({
    where: { date: req.query.date },
    attributes: ['date', 'title', 'year', 'content_id'] // 返回特定字段
  });
  if (project.length) {
    return res.api_success(project);
  }
  spiderData(req, res);
};
